/*
 * Server.h
 *
 *      Author: smirnovaop
 */

#ifndef SERVER_H_
#define SERVER_H_

#include "Message.h"
#include "Debug.h"
#include <vector>
#include <utility>
#include <cstdio>

#define ID(a) (a).second
#define PTR(a) (a).first

class Client;

class Server {
	//массив пар - клиент <-> id
	std::vector< std::pair<Client*,unsigned int> > clnts;
	/**
	 * Отправка сообщения сервером клиенту.
	 * @msg - ссылка на передаваемое сообщение
	 * @id - id получателя.
	 */
	int send(Message& msg, u_int32_t id);

	/**
	 * Принятие сообщения клиента.
	 * Именно этот метод обрабаывает типы сообщения
	 * и производит проверки на регитрацию,
	 * генерирование и отправку подтверждений,
	 * сердце сервера.
	 */
	int recv(Message& msg);
public:
	Server();
	virtual ~Server();

	/**
	 * Для доступа к приватному
	 * методу клиента recv.
	 */
	friend class Client;
};

#endif /* SERVER_H_ */
